package com.code.test.first.str;

/**
 * https://github.com/youngyangyang04/leetcode-master/blob/master/problems/0541.%E5%8F%8D%E8%BD%AC%E5%AD%97%E7%AC%A6%E4%B8%B2II.md
 * <p>
 * 给定一个字符串 s 和一个整数 k，从字符串开头算起, 每计数至 2k 个字符，就反转这 2k 个字符中的前 k 个字符。
 * <p>
 * 如果剩余字符少于 k 个，则将剩余字符全部反转。
 * <p>
 * 如果剩余字符小于 2k 但大于或等于 k 个，则反转前 k 个字符，其余字符保持原样。
 * <p>
 * 示例:
 * <p>
 * 输入: s = "abcdef geerrt yuhg", k = 2
 * 输出: "bacdfeg"
 */
public class Code541 {

    public static void main(String[] args) {
        String input = "abcdefgeerrtyuhg";
        reverseWithCount(input,3);

    }

    public static void reverseWithCount(String input, int k) {
        char[] s = input.toCharArray();
        for (int i = 0; i < s.length; i += 2 * k) {
            int left = i;
            int right = Math.min(s.length - 1, left + k - 1);
            while (left < right) {
                char temp = s[left];
                s[left] = s[right];
                s[right] = temp;
                left++;
                right--;
            }
        }
        System.out.println(new String(s));
    }

    public static void reverse(char[] s) {
        int left = 0;
        int right = s.length - 1;
        while (left < right) {
            char temp = s[left];
            s[left] = s[right];
            s[right] = temp;
            left++;
            right--;
        }
    }


}
